//package sicnu.cs.ich.ich.ranking.service.impl;
//
//import lombok.RequiredArgsConstructor;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.cache.annotation.CacheConfig;
//import org.springframework.data.redis.core.ZSetOperations;
//import org.springframework.stereotype.Service;
//import sicnu.cs.ich.api.common.Constants;
//import sicnu.cs.ich.api.common.ResultInfo;
//import sicnu.cs.ich.api.domain.dto.ActivityHitDTO;
//import sicnu.cs.ich.api.domain.dto.CallDTO;
//import sicnu.cs.ich.common.services.impl.RedisService;
//import sicnu.cs.ich.ich.ranking.feign.ActivityFeign;
//import sicnu.cs.ich.ich.ranking.service.IActivityRankingService;
//
//import java.util.*;
//import java.util.concurrent.ConcurrentHashMap;
//
///**
// * @author 黎琦
// * @date 2021/12/23 16:14
// **/
////@Service
//@Slf4j
//@CacheConfig(cacheNames = "activity")
//public class ActivityRankingServiceImpl implements IActivityRankingService {
//    @Autowired
//    RedisService redisService;
//    /**
//     * 记录活动点击量
//     */
//    private final ConcurrentHashMap<Integer, Long> ACTIVITY_CLICK = new ConcurrentHashMap<>();
//    /**
//     * 记录号召点击量
//     */
//    private final ConcurrentHashMap<Integer, Long> CALL_CLICK = new ConcurrentHashMap<>();
//
//    /**
//     * 排行榜
//     */
//    private final PriorityQueue<ActivityHitDTO> RANKING = new PriorityQueue<>(new Comparator<ActivityHitDTO>() {
//        @Override
//        public int compare(ActivityHitDTO o1, ActivityHitDTO o2) {
//            return (int)(o1.getHit()-o2.getHit());
//        }
//    });
//
//    @Autowired
//    ActivityFeign activityFeign;
//    /**
//     * 指定活动热度+1
//     *
//     * @param id 活动id
//     */
//    @Override
//    public void activityHitIncrement(Integer id) {
//        ACTIVITY_CLICK.merge(id, 1L, Long::sum);
//    }
//
//    /**
//     * 指定号召热度+1
//     *
//     * @param id 活动id
//     */
//    @Override
//    public void callHitIncrement(Integer id) {
//        CALL_CLICK.merge(id, 1L, Long::sum);
//    }
//
//    @Override
//    public List<Integer> hitCalculate() {
//        //评论量MongoDB
//        //点赞量MongoDB
//        //查询活动的报名量participate
//        ResultInfo<List<Map<Integer, Long>>> listResultInfo = activityFeign.rankNeedData();
//        List<Map<Integer, Long>> maps = listResultInfo.getData();
//        double hit;
//        for(Integer key:ACTIVITY_CLICK.keySet()){
//            //计算出每个活动的热度值
//            hit=(ACTIVITY_CLICK.get(key)*0.2+maps.get(0).get(key)*0.5+maps.get(1).get(key)*0.5+maps.get(3).get(key)*0.5)*10;
//
//            if(RANKING.size()>=Constants.ACTIVITY_RANK_SIZE){
//                //如果ranking的大小大于排行榜的最大数量，因此它的最小值一定不为null
//                assert RANKING.peek() != null;
//                //如果ranking的最小值小于新算的hit,才更新
//                if(RANKING.peek().getHit()<hit){
//                    RANKING.remove();
//                    RANKING.add(ActivityHitDTO.builder().aid(key).hit(hit).build());
//                }
//            }else{
//                //如果没到最大数量，就一直插入
//                RANKING.add(ActivityHitDTO.builder().aid(key).hit(hit).build());
//            }
//        }
//        //存入Redis
//        List<Integer> ids = new ArrayList<>();
//        for (ActivityHitDTO activityHitDTO : RANKING) {
//            ids.add(activityHitDTO.getAid());
//        }
////        redisService.cacheList(Constants.REDIS_RANK_ACTIVITY_HIT, ids);
//        return ids;
//    }
//
//}
